Python基于NumPy模块的矩阵运算 您所在的位置:网站首页 python 列表矩阵 Python基于NumPy模块的矩阵运算

Python基于NumPy模块的矩阵运算

2023-03-21 22:25| 来源: 网络整理| 查看: 265

「由于微信公众号改变了推送规则,为了每次新的推送可以在第一时间出现在您的订阅列表中,记得将本公众号设为星标或置顶喔~」

NumPy 是基于 c 语言而编写的一个开源的 Python 科学计算库,使用 NumPy,就可以很自然地使用数组和矩阵,其存储效率和输入输出性能远远优于 Python 中等价的基本数据结构,同样的数值计算任务,使用 NumPy 要比直接编写 Python 代码便捷得多。NumPy 包含了很多很实用的 NumPy 数学函数,涵盖线性代数、傅里叶变换等功能,因此 NumPy 深受许多开发者的喜爱。

本文根据 Python 的 NumPy 模块,整理了一些常见的矩阵操作。本文所有代码都是基于import numpy as np导入了 numpy 语句而书写。

1 定义矩阵 直接创建矩阵

创建一个矩阵可以直接对列表对象转化,也可以对字符串对象进行转化(G 格式和 matlab 一致)

列表转化为矩阵   # 创建一维行向量  a = np.array([1, 2, 3])

  # 创建二维矩阵  b = np.array([[1, 2, 3], [4, 5, 6]])  print("a:", a)  print("b:", b)

输出结果:

字符串转矩阵 # 像matlab那样不同行用分号隔开b1 = np.mat("1 2 3;4 5 6;7 8 9")print("b1:", b1)

输出结果:

利用函数创建矩阵

NumPy 提供有很方便创建全 0 矩阵、单位矩阵、随机矩阵的函数。

创建全 0 矩阵 c = np.zeros((3, 3))print("c:", c)

输出结果:

创建单位矩阵 d = np.eye(3)print("d:", d)

输出结果:

创建全 1 矩阵 e = np.ones((3, 3))print("e:", e)

输出结果:

创建指定大小的随机矩阵(int 类型) # (初始值,结束值,大小)f = np.random.randint(1, 10, (2, 3))print("f:", f)

输出结果:

创建指定大小的随机矩阵 g = np.random.random((3, 3))print("g:", g)

输出结果:

2 矩阵运算 矩阵元素的加减乘除

这里要注意的是矩阵之间直接使用四则运算符号+ - * /代表的是两个矩阵对应元素的四则运算,所以传入的矩阵一定要大小相等。我们可以使用a.shape查看矩阵的大小。

h = np.array([[1, 2, 3], [4, 5, 6]])g = np.array([[7, 8, 9], [10, 11, 12]])print("h+g:", h + g)  # 加print("h-g:", h - g)  # 减print("h*g:", h * g)  # 乘print("h/g:", h / g)  # 除

输出结果:

矩阵的转置 h = np.array([[1, 2, 3], [4, 5, 6]])print("h的转置", h.T)

输出结果:

矩阵的点乘

这里介绍了三种矩阵点乘的方式,实际编程中我们只需要选择掌握一种即可。

h = np.array([[1, 2, 3], [4, 5, 6]])g = np.array([[7, 8, 9], [10, 11, 12]])print("h点乘(g的转置)", np.dot(h, g.T))print("h点乘(g的转置)", h.dot(g.T))print("h点乘(g的转置)", np.matmul(h, g.T))

输出结果:

矩阵的数乘 h = np.array([1, 1, 3])print("矩阵数乘:", h * 3)

输出结果:

矩阵的范数 i = np.array([0, 1, -1])print("L^2-范数", np.linalg.norm(i, 2))print("L^5-范数", np.linalg.norm(i, 5))print("L^10-范数", np.linalg.norm(i, 10))

输出结果:

矩阵内积 j = np.array([0, 1, -1])k = np.array([1, 0, 1])print("j与k的内积:", np.inner(j, k))

输出结果:

矩阵求逆 l = np.random.randint(1, 10, (3, 3))print("l:", l)print("l的逆:", np.linalg.inv(l))

输出结果:

矩阵求特征值

使用eigvals函数可以获取矩阵的特征值,使用eig函数可以获取矩阵的特征值和特征向量,其返回的是一个二元组,第0个元素是特征值,第1个元素是特征向量。

m = np.mat("3 -2;1 0")print("m的特征值:", np.linalg.eigvals(m))# eig求特征值与特征向量,返回元组m_tem1, m_tem2 = np.linalg.eig(m)print("m的特征向量:",m_tem2)

输出结果:

计算行列式

计算矩阵行列式时,要注意矩阵是否是方阵。

n = np.random.randint(1, 10, (2, 2))print("n:", n)print("n的行列式:", np.linalg.det(n))

输出结果:

3 其他常用函数 计算算数平均值 o = np.array([[1, 2, 3], [4, 5, 6]])print("o的平均值:", np.mean(o))

输出结果:

计算方差 p = np.array([[1, 2, 3], [4, 5, 6]])print("p的方差:", np.var(p))

输出结果:

获取最大值最小值

NumPy 提供有最大值最小值获取函数,可以很方便的获取一个矩阵的最值,从而便于进行区间中点的计算等操作。

p = np.array([[1, 2, 3], [4, 5, 6]])print("最大值", np.min(p))print("最小值", np.max(p))

输出结果:

矩阵的垂直与水平组合

使用 vstack 函数可以将两个数组进行垂直方向的合并,使用 hstack 函数可以将两个数组进行水平方向的合并。

q = np.array([[1, 2], [3, 4]])r = np.array([[5, 6], [7, 8]])print("垂直组合:", np.vstack((q, r)))print("水平组合:", np.hstack((q, r)))

输出结果:

4.小结

NumPy 模块的内容不仅仅局限于此,想要了解更过的 numpy 模块使用知识,请参考NumPy 参考手册 | NumPy同时也欢迎读者的宝贵建议与支持!

「本公众号的原创成果,在未经允许的情况下,请勿用于任何商业用途!」

「您的点赞、收藏与关注是我创作的最大动力!」



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有